﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace FAS.Objetos
{
    public class Problema: IFas
    {
        #region Atributos
        public int IdMateria { get; set; }
        public int IdProblema { get; set; }
        public string Nombre { get; set; }
        public string Texto { get; set; }
        public string IdObjetivo { get; set; }
        public IList<Opcion> Opciones {get; set;}
        private ConexionMySQL conexion = new ConexionMySQL();
        #endregion

        #region Constructor
        public Problema() { }
        public Problema(string nombre, string idObjetivo, IList<Opcion> opciones, string texto,int IdMateria)
        {
            this.Nombre = nombre;
            this.IdObjetivo = idObjetivo;
            this.Opciones = opciones;
            this.Texto = texto;
            this.IdMateria = IdMateria;
        }
        #endregion

        #region Metodos

        public static int getLast() 
        {
            try
            {
                DataTable dt = new ConexionMySQL().GetQuery("SELECT IdProblema FROM Problema ORDER BY IdProblema DESC LIMIT 1").Tables[0];
                return int.Parse(dt.Rows[0][0].ToString());
            }
            catch (Exception e) { return 1; }
        }

        public static Problema GetProblema(int id_Problema)
        {
            DataSet data = new ConexionMySQL().GetQuery("SELECT * FROM `Problema` where IdProblema = '" + id_Problema + "'");
            Problema problema = new Problema();
            problema.IdProblema = id_Problema;
            problema.Nombre = data.Tables[0].Rows[0]["Nombre"].ToString();
            problema.Texto = data.Tables[0].Rows[0]["Texto"].ToString();
            problema.IdObjetivo = (data.Tables[0].Rows[0]["IdObjetivo"].ToString());
            problema.IdMateria = int.Parse(data.Tables[0].Rows[0]["IdMateria"].ToString());
            problema.Opciones = getOpciones(id_Problema);
            return problema;
        }

        public static IList<Opcion> getOpciones(int idProblema)
        {
            IList<Opcion> opciones=new List<Opcion>();
            DataSet data = new ConexionMySQL().GetQuery("SELECT * FROM `Opcion` where IdProblema = '" + idProblema + "'");
            foreach (DataRow r in data.Tables[0].Rows)
            {
                Opcion o = new Opcion();
                opciones.Add(o.GetOpcion(int.Parse(r["IdOpcion"].ToString())));
            }
            return opciones;
        }

        public Opcion GetRespuesta() 
        {
            foreach(Opcion op in Opciones)
            {
                if (op.Respuesta)
                    return op;
            }
            return null;
        }

        public Dictionary<string, object> getAtributos()
        {
            Dictionary<string, object> diccionario = new Dictionary<string, object>();
            diccionario.Add("IdProblemaP", IdProblema);
            diccionario.Add("NombreP", Nombre);
            diccionario.Add("TextoP", Texto);
            diccionario.Add("IdObjetivoP", IdObjetivo);
            diccionario.Add("IdMateriaP", IdMateria);
            return diccionario;
        }

        public Dictionary<string, object> getAtributosInsertar()
        {
            Dictionary<string, object> diccionario = new Dictionary<string, object>();
            diccionario.Add("TextoP", Texto);
            diccionario.Add("NombreP", Nombre);
            diccionario.Add("IdObjetivoP", IdObjetivo);
            diccionario.Add("IdMateriaP", IdMateria);
            return diccionario;
        }

        public bool update()
        {

            return conexion.AccionesDB(getAtributos(), "UpdateProblema");
        }

        public bool delete()
        {
            return conexion.AccionesDB(getAtributos(), "DeleteProblema");
        }

        public int insertar()
        {
            return conexion.insertar(getAtributosInsertar(), "InsertarProblema", "IdProblema", "`Problema`");
        }        
        #endregion
    }
}
